import json, threading, time
import tones, ui
from .utils import hasScreenCurtain
# 定义一些装饰器
def notScreenCurtain(func):
    #在没有开启黑屏的情况下执行 func 函数
    def wrapper(*args, **kwargs):
        if hasScreenCurtain():
            ui.message(_("请先关闭黑屏后再操作。"))
            return
        return func(*args, **kwargs)
    return wrapper
def withWaitSound(func):
    # 执行 func 函数的同时，播放 do, mi, sol 三个音符
    def beep():
        for i in (523, 659, 784):
            tones.beep(i, 50)
            time.sleep(0.1)
    def wrapper(*args, **kwargs):
        threading.Thread(target=beep).start()
        return func(*args, **kwargs)
    return wrapper
def subthread(func):
    # 把 func 函数放在子线程中执行，如果子线程有任务则跳过
    event = threading.Event()
    def run(*args, **kwargs):
        # 判断是否有任务正在执行
        if event.isSet():
            tones.beep(400, 40)
            return
        event.set()
        func(*args, **kwargs)
        event.clear()
    def wrapper(*args, **kwargs):
        threading.Thread(target=run, args=args, kwargs=kwargs).start()
    return wrapper
def jsonData(func):
    # 把 func 返回的数据转换为 json 对应的 python 字典
    def wrapper(*args, **kwargs):
        res = func(*args, **kwargs)
        if not res:return
        try:
            return json.loads(res)
        except json.decoder.JSONDecodeError:pass
        return res.decode()
    return wrapper